package com.lebang.service;

import com.lebang.entity.sys.LbbGroup;
import com.lebang.entity.sys.LbbGroupRole;
import com.lebang.entity.sys.Role;
import com.lebang.example.LbbGroupExample;
import com.lebang.mapper.LbbGroupMapper;
import com.lebang.mapper.LbbGroupRoleMapper;
import com.lebang.mapper.LbbRoleMapper;
import com.lebang.model.enums.Booleans;
import com.lebang.model.vo.GroupVo;
import com.lebang.model.vo.SearchVo;
import com.lebangweb.common.UUIDUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 分组管理
 * @className GroupService
 * @author weizx  
 * @date 2018年7月11日 下午6:51:57
 */
@Service
public class GroupService {

	@Autowired
	private LbbRoleMapper roleMappper;
	@Autowired
	private LbbGroupRoleMapper lbbGroupRoleMapper;
	@Autowired
	private LbbGroupMapper lbbGroupMapper;

	/**
	 * 分组列表
	 * @author weizx  
	 * @date 2018年7月11日 下午6:51:54  
	 * @param vo
	 * @return
	 */
	public Map<String, Object> list(SearchVo vo) {
		Map<String, Object> data = new HashMap<String, Object>(1);
		int total = lbbGroupMapper.total(vo.getSearch());
		List<Map<String, Object>> rows = lbbGroupMapper.pagging(vo);
		data.put("total", total);
		data.put("rows", rows);
		return data;
	}

	/**
	 * 获取最顶级的
	 * @author weizx  
	 * @date 2018年7月12日 上午9:29:11  
	 * @return
	 */
	public List<Map<String, Object>> getTopGroups() {
		List<Map<String, Object>> list = lbbGroupMapper.getTopGroup();
		return list;
	}

	/**
	 * 添加
	 * @author weizx  
	 * @date 2018年7月12日 上午10:55:06  
	 * @param vo
	 */
	public void insert(GroupVo vo) {
		LbbGroup group = new LbbGroup();
		group.setGroupId(UUIDUtil.S());
		group.setParentId(vo.getParentId());
		group.setRemark(vo.getRemark());
		group.setTitle(vo.getTitle());
		group.setHasDeleted(Booleans.False.name());
		group.setCreateTime(new Date());
		lbbGroupMapper.insertSelective(group);
	}

	/**
	 * 更新
	 * @author weizx  
	 * @date 2018年7月12日 上午11:08:08  
	 * @param vo
	 */
	public int update(GroupVo vo) {
		LbbGroup group=lbbGroupMapper.getByGroupId(vo.getGroupId());
		if (group==null) {
			return 0;
		}
		group.setParentId(vo.getParentId());
		group.setRemark(vo.getRemark());
		group.setTitle(vo.getTitle());
		return lbbGroupMapper.updateByPrimaryKeySelective(group);
		
	}

	/**
	 * 获取角色
	 * @author weizx  
	 * @date 2018年7月12日 下午12:04:47  
	 * @param groupId
	 * @return
	 */
	public List<Role> getRoles(String groupId) {
		List<Role> list = roleMappper.list(groupId);
		return list;
	}

	public LbbGroup getByGroupId(String groupId) {
		return lbbGroupMapper.getByGroupId(groupId);
	}

	public Long countByParentId(String groupId) {
		LbbGroupExample lbbGroupExample=new LbbGroupExample();
		lbbGroupExample.or().andParentIdEqualTo(groupId);
		return lbbGroupMapper.countByExample(lbbGroupExample);
	}

	public int delete(LbbGroup group) {
		group.setHasDeleted("True");
		return  lbbGroupMapper.updateByPrimaryKeySelective(group);
	}

	public LbbGroupRole getByRoleIdAndGroupId(String roleid, String groupid) {
	return lbbGroupRoleMapper.getByRoleIdAndGroupId(roleid,groupid);
	}

	public int insertRole(LbbGroupRole gr) {
		gr.setHasDeleted(Booleans.False.name());
		gr.setCreateTime(new Date());
		return lbbGroupRoleMapper.insertSelective(gr);
	}

	public int deleteRole(LbbGroupRole gr) {
		gr.setHasDeleted("True");
		return lbbGroupRoleMapper.updateByPrimaryKeySelective(gr);
	}
}
